﻿using System;
using System.Collections.Generic;
using System.Text;
using DAL;
using System.Data;
using System.Data.SqlClient;
using System.Web;
using BLL;

namespace BLL
{ 
    public class Consecutivo
    {
        #region propiedades
        private int _IdConsecutivo;

        public int IdConsecutivo
        {
            get { return _IdConsecutivo; }
            set { _IdConsecutivo = value; }
        }

        private int _UltimoConsecutivo;

        public int UltimoConsecutivo
        {
            get { return _UltimoConsecutivo; }
            set { _UltimoConsecutivo = value; }
        }

        private int _FK_IdProducto;

        public int FK_IdProducto
        {
            get { return _FK_IdProducto; }
            set { _FK_IdProducto = value; }
        }

        private int _consecutivo;

        public int consecutivo
        {
            get { return _consecutivo; }
            set { _consecutivo = value; }
        }


        private bool _consec_TienePrefijo;

        public bool consec_TienePrefijo
        {
            get { return _consec_TienePrefijo; }
            set { _consec_TienePrefijo = value; }
        }

        private string _consec_DescPrefijo;

        public string consec_DescPrefijo
        {
            get { return _consec_DescPrefijo; }
            set { _consec_DescPrefijo = value; }
        }


        private string _TipoProductoDesc;

        public string TipoProductoDesc
        {
            get { return _TipoProductoDesc; }
            set { _TipoProductoDesc = value; }
        }

        private bool _consec_TieneRango;

        public bool consec_TieneRango
        {
            get { return _consec_TieneRango; }
            set { _consec_TieneRango = value; }
        }

        private int _consec_RangoIncial;

        public int consec_RangoIncial
        {
            get { return _consec_RangoIncial; }
            set { _consec_RangoIncial = value; }
        }


        private int _consec_RangoFinal;

        public int consec_RangoFinal
        {
            get { return _consec_RangoFinal; }
            set { _consec_RangoFinal = value; }
        }


        private string _mensaje;

        public string mensaje
        {
            get { return _mensaje; }
            set { _mensaje = value; }
        }

        private int _num_error;

        public int num_error
        {
            get { return _num_error; }
            set { _num_error = value; }
        }
        #endregion

        #region variables privadas
        SqlConnection conexion;
        string mensaje_error;
        int numero_error;
        string sql;
        DataSet ds;
        #endregion

        #region metodos

     

        public void insertaError()
        {
                 ErrorL objerror = new ErrorL();
                objerror.mensaje = _mensaje;
                objerror.num_error = _num_error;
                objerror.URL = HttpContext.Current.Request.Url.AbsoluteUri;
                objerror.Fecha = DateTime.Now;
                objerror.guardar_Error();
        }
       
        

        public DataSet carga_tiposProductos()
        {
            conexion = cls_DAL.trae_conexion("Progra5", ref mensaje_error, ref numero_error);
            if (conexion == null)
            {
                //insertar en la table de errores
                insertaError();
                HttpContext.Current.Response.Redirect("frm_Error.aspx?error=" + numero_error.ToString() + "&men=" + mensaje_error);
                return null;
            }
            else
            {
                sql = "usp_TipoProdcutos_Consultar";
                ds = cls_DAL.ejecuta_dataset(conexion, sql, true, ref mensaje_error, ref numero_error);
                if (numero_error != 0)
                {
                    //insertar en la table de errores
                    HttpContext.Current.Response.Redirect("frm_Error.aspx?error=" + numero_error.ToString() + "&men=" + mensaje_error);
                    return null;
                }
                else
                {
                    return ds;
                }
            }

        }


        public void carga_datos_Consecutivo(int cod_consec)
        {
            conexion = cls_DAL.trae_conexion("Progra5", ref mensaje_error, ref numero_error);
            if (conexion == null)
            {
                //insertar en la table de errores
                insertaError();
                HttpContext.Current.Response.Redirect("frm_Error.aspx?error=" + numero_error.ToString() + "&men=" + mensaje_error);
            }
            else
            {
                sql = "usp_Consecutivos_InfoConsultar";
                ParamStruct[] parametros = new ParamStruct[1];
                cls_DAL.agregar_datos_estructura_parametros(ref parametros, 0, "@IdConsecutivo", SqlDbType.Int, cod_consec);
                ds = cls_DAL.ejecuta_dataset(conexion, sql, true, parametros, ref mensaje_error, ref numero_error);
                if (numero_error != 0)
                {
                    //insertar en la table de errores
                    insertaError();
                    HttpContext.Current.Response.Redirect("frm_Error.aspx?error=" + numero_error.ToString() + "&men=" + mensaje_error);
                }
                else
                {
                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        _IdConsecutivo = Convert.ToInt32(ds.Tables[0].Rows[0]["IdConsecutivo"]);
                        _FK_IdProducto = Convert.ToInt32(ds.Tables[0].Rows[0]["FK_IdProducto"]);
                        _consecutivo = Convert.ToInt32(ds.Tables[0].Rows[0]["consecutivo"]);
                        _consec_TienePrefijo = Convert.ToBoolean(ds.Tables[0].Rows[0]["consec_TienePrefijo"]);
                        _TipoProductoDesc = ds.Tables[0].Rows[0]["TipoProductoDesc"].ToString();
                        _consec_DescPrefijo = ds.Tables[0].Rows[0]["consec_DescPrefijo"].ToString();
                        _consec_TieneRango =Convert.ToBoolean((ds.Tables[0].Rows[0]["consec_TieneRango"]));
                        if (_consec_TieneRango)
                        {
                            _consec_RangoIncial = Convert.ToInt32(ds.Tables[0].Rows[0]["consec_RangoIncial"]);
                            _consec_RangoFinal = Convert.ToInt32(ds.Tables[0].Rows[0]["consec_RangoFinal"]);
                        }
                       
                    }
                    else
                    {
                        _consec_DescPrefijo = "Error";
                        _num_error = numero_error;
                        _mensaje = mensaje_error;
                    }
                }
            }
        }

  
        public bool modificar_Consecutivo()
        {
            conexion = cls_DAL.trae_conexion("Progra5", ref mensaje_error, ref numero_error);
            if (conexion == null)
            {
                //insertar en la table de errores
                insertaError();
                HttpContext.Current.Response.Redirect("frm_Error.aspx?error=" + numero_error.ToString() + "&men=" + mensaje_error);
                return false;
            }
            else
            {

                sql = "usp_consecutivo_Modificar";
             
                ParamStruct[] parametros = new ParamStruct[8];
                cls_DAL.agregar_datos_estructura_parametros(ref parametros, 0, "@IdConsecutivo", SqlDbType.Int, _IdConsecutivo);
                cls_DAL.agregar_datos_estructura_parametros(ref parametros, 1, "@FK_IdProducto", SqlDbType.Int, _FK_IdProducto);
                cls_DAL.agregar_datos_estructura_parametros(ref parametros, 2, "@consecutivo", SqlDbType.Int, _consecutivo);
                cls_DAL.agregar_datos_estructura_parametros(ref parametros, 3, "@consec_TienePrefijo", SqlDbType.Bit, _consec_TienePrefijo);
                cls_DAL.agregar_datos_estructura_parametros(ref parametros, 4, "@consec_DescPrefijo", SqlDbType.NVarChar, _consec_DescPrefijo);
                cls_DAL.agregar_datos_estructura_parametros(ref parametros, 5, "@consec_TieneRango", SqlDbType.Bit, _consec_TieneRango);
                cls_DAL.agregar_datos_estructura_parametros(ref parametros, 6, "@consec_RangoIncial", SqlDbType.Int, _consec_RangoIncial);
                cls_DAL.agregar_datos_estructura_parametros(ref parametros, 7, "@consec_RangoFinal", SqlDbType.Int, _consec_RangoFinal);
                cls_DAL.conectar(conexion, ref mensaje_error, ref numero_error);
                cls_DAL.ejecuta_sqlcommand(conexion, sql, true, parametros, ref mensaje_error, ref numero_error);
                if (numero_error != 0)
                {
                    //insertar en la table de errores
                    insertaError();
                    HttpContext.Current.Response.Redirect("frm_Error.aspx?error=" + numero_error.ToString() + "&men=" + mensaje_error);
                    cls_DAL.desconectar(conexion, ref mensaje_error, ref numero_error);
                    return false;
                }
                else
                {
                    cls_DAL.desconectar(conexion, ref mensaje_error, ref numero_error);
                    return true;
                }
            }
        }

        public void carga_datos_UltimoConsecutivo(int cod_producto)
        {
            conexion = cls_DAL.trae_conexion("Progra5", ref mensaje_error, ref numero_error);
            if (conexion == null)
            {
                //insertar en la table de errores
                insertaError();
                HttpContext.Current.Response.Redirect("frm_Error.aspx?error=" + numero_error.ToString() + "&men=" + mensaje_error);
            }
            else
            {
                sql = "usp_consecutivo_crear";
                ParamStruct[] parametros = new ParamStruct[1];
                cls_DAL.agregar_datos_estructura_parametros(ref parametros, 0, "@FK_IdProducto", SqlDbType.Int, cod_producto);
                ds = cls_DAL.ejecuta_dataset(conexion, sql, true, parametros, ref mensaje_error, ref numero_error);
                if (numero_error != 0)
                {
                    //insertar en la table de errores
                    insertaError();
                    HttpContext.Current.Response.Redirect("frm_Error.aspx?error=" + numero_error.ToString() + "&men=" + mensaje_error);
                }
                else
                {
                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        _UltimoConsecutivo = Convert.ToInt32(ds.Tables[0].Rows[0]["armar"]);

                    }
                    else
                    {
                        _num_error = numero_error;
                        _mensaje = mensaje_error;
                    }
                }
            }
        }
        public DataSet carga_lista_consecutivos()
        {
            conexion = cls_DAL.trae_conexion("Progra5", ref mensaje_error, ref numero_error);
            if (conexion == null)
            {
                //insertar en la table de errores
                insertaError();
                HttpContext.Current.Response.Redirect("frm_Error.aspx?error=" + numero_error.ToString() + "&men=" + mensaje_error);
                return null;
            }
            else
            {
                sql = "usp_ConsecutivosConsultar";
                ds = cls_DAL.ejecuta_dataset(conexion, sql, true, ref mensaje_error, ref numero_error);
                if (numero_error != 0)
                {
                    //insertar en la table de errores
                    insertaError();
                    HttpContext.Current.Response.Redirect("frm_Error.aspx?error=" + numero_error.ToString() + "&men=" + mensaje_error);
                    return null;
                }
                else
                {
                    return ds;
                }
            }

        }
        
     

        #endregion
    }
}
